// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.

namespace Microsoft.CodeAnalysis.CSharp
{
    // ADD NEW SYNTAX TO THE END OF THIS ENUM OR YOU WILL BREAK BINARY
    // COMPATIBILITY
    public enum SyntaxKind : ushort
    {
        None = 0,
        List = GreenNode.ListKind,

        // punctuation
        TildeToken = 8193,
        ExclamationToken = 8194,
        DollarToken = 8195,
        PercentToken = 8196,
        CaretToken = 8197,
        AmpersandToken = 8198,
        AsteriskToken = 8199,
        OpenParenToken = 8200,
        CloseParenToken = 8201,
        MinusToken = 8202,
        PlusToken = 8203,
        EqualsToken = 8204,
        OpenBraceToken = 8205,
        CloseBraceToken = 8206,
        OpenBracketToken = 8207,
        CloseBracketToken = 8208,
        BarToken = 8209,
        BackslashToken = 8210,
        ColonToken = 8211,
        SemicolonToken = 8212,
        DoubleQuoteToken = 8213,
        SingleQuoteToken = 8214,
        LessThanToken = 8215,
        CommaToken = 8216,
        GreaterThanToken = 8217,
        DotToken = 8218,
        QuestionToken = 8219,
        HashToken = 8220,
        SlashToken = 8221,

        // additional xml tokens
        SlashGreaterThanToken = 8222, // xml empty element end
        LessThanSlashToken = 8223, // element end tag start token
        XmlCommentStartToken = 8224, // <!--
        XmlCommentEndToken = 8225, // -->
        XmlCDataStartToken = 8226, // <![CDATA[
        XmlCDataEndToken = 8227, // ]]>
        XmlProcessingInstructionStartToken = 8228, // <?
        XmlProcessingInstructionEndToken = 8229, // ?>

        // compound punctuation
        BarBarToken = 8230,
        AmpersandAmpersandToken = 8231,
        MinusMinusToken = 8232,
        PlusPlusToken = 8233,
        ColonColonToken = 8234,
        QuestionQuestionToken = 8235,
        MinusGreaterThanToken = 8236,
        ExclamationEqualsToken = 8237,
        EqualsEqualsToken = 8238,
        EqualsGreaterThanToken = 8239,
        LessThanEqualsToken = 8240,
        LessThanLessThanToken = 8241,
        LessThanLessThanEqualsToken = 8242,
        GreaterThanEqualsToken = 8243,
        GreaterThanGreaterThanToken = 8244,
        GreaterThanGreaterThanEqualsToken = 8245,
        SlashEqualsToken = 8246,
        AsteriskEqualsToken = 8247,
        BarEqualsToken = 8248,
        AmpersandEqualsToken = 8249,
        PlusEqualsToken = 8250,
        MinusEqualsToken = 8251,
        CaretEqualsToken = 8252,
        PercentEqualsToken = 8253,

        // Keywords
        BoolKeyword = 8254,
        ByteKeyword = 8255,
        SByteKeyword = 8256,
        ShortKeyword = 8257,
        UShortKeyword = 8258,
        IntKeyword = 8259,
        UIntKeyword = 8260,
        LongKeyword = 8261,
        ULongKeyword = 8262,
        DoubleKeyword = 8263,
        FloatKeyword = 8264,
        DecimalKeyword = 8265,
        StringKeyword = 8266,
        CharKeyword = 8267,
        VoidKeyword = 8268,
        ObjectKeyword = 8269,
        TypeOfKeyword = 8270,
        SizeOfKeyword = 8271,
        NullKeyword = 8272,
        TrueKeyword = 8273,
        FalseKeyword = 8274,
        IfKeyword = 8275,
        ElseKeyword = 8276,
        WhileKeyword = 8277,
        ForKeyword = 8278,
        ForEachKeyword = 8279,
        DoKeyword = 8280,
        SwitchKeyword = 8281,
        CaseKeyword = 8282,
        DefaultKeyword = 8283,
        TryKeyword = 8284,
        CatchKeyword = 8285,
        FinallyKeyword = 8286,
        LockKeyword = 8287,
        GotoKeyword = 8288,
        BreakKeyword = 8289,
        ContinueKeyword = 8290,
        ReturnKeyword = 8291,
        ThrowKeyword = 8292,
        PublicKeyword = 8293,
        PrivateKeyword = 8294,
        InternalKeyword = 8295,
        ProtectedKeyword = 8296,
        StaticKeyword = 8297,
        ReadOnlyKeyword = 8298,
        SealedKeyword = 8299,
        ConstKeyword = 8300,
        FixedKeyword = 8301,
        StackAllocKeyword = 8302,
        VolatileKeyword = 8303,
        NewKeyword = 8304,
        OverrideKeyword = 8305,
        AbstractKeyword = 8306,
        VirtualKeyword = 8307,
        EventKeyword = 8308,
        ExternKeyword = 8309,
        RefKeyword = 8310,
        OutKeyword = 8311,
        InKeyword = 8312,
        IsKeyword = 8313,
        AsKeyword = 8314,
        ParamsKeyword = 8315,
        ArgListKeyword = 8316,
        MakeRefKeyword = 8317,
        RefTypeKeyword = 8318,
        RefValueKeyword = 8319,
        ThisKeyword = 8320,
        BaseKeyword = 8321,
        NamespaceKeyword = 8322,
        UsingKeyword = 8323,
        ClassKeyword = 8324,
        StructKeyword = 8325,
        InterfaceKeyword = 8326,
        EnumKeyword = 8327,
        DelegateKeyword = 8328,
        CheckedKeyword = 8329,
        UncheckedKeyword = 8330,
        UnsafeKeyword = 8331,
        OperatorKeyword = 8332,
        ExplicitKeyword = 8333,
        ImplicitKeyword = 8334,

        // contextual keywords
        YieldKeyword = 8335,
        PartialKeyword = 8336,
        AliasKeyword = 8337,
        GlobalKeyword = 8338,
        AssemblyKeyword = 8339,
        ModuleKeyword = 8340,
        TypeKeyword = 8341,
        FieldKeyword = 8342,
        MethodKeyword = 8343,
        ParamKeyword = 8344,
        PropertyKeyword = 8345,
        TypeVarKeyword = 8346,
        GetKeyword = 8347,
        SetKeyword = 8348,
        AddKeyword = 8349,
        RemoveKeyword = 8350,
        WhereKeyword = 8351,
        FromKeyword = 8352,
        GroupKeyword = 8353,
        JoinKeyword = 8354,
        IntoKeyword = 8355,
        LetKeyword = 8356,
        ByKeyword = 8357,
        SelectKeyword = 8358,
        OrderByKeyword = 8359,
        OnKeyword = 8360,
        EqualsKeyword = 8361,
        AscendingKeyword = 8362,
        DescendingKeyword = 8363,
        NameOfKeyword = 8364,
        AsyncKeyword = 8365,
        AwaitKeyword = 8366,

        // additional preprocessor keywords
        ElifKeyword = 8367,
        EndIfKeyword = 8368,
        RegionKeyword = 8369,
        EndRegionKeyword = 8370,
        DefineKeyword = 8371,
        UndefKeyword = 8372,
        WarningKeyword = 8373,
        ErrorKeyword = 8374,
        LineKeyword = 8375,
        PragmaKeyword = 8376,
        HiddenKeyword = 8377,
        ChecksumKeyword = 8378,
        DisableKeyword = 8379,
        RestoreKeyword = 8380,
        ReferenceKeyword = 8381,

        // Other
        OmittedTypeArgumentToken = 8382,
        OmittedArraySizeExpressionToken = 8383,
        EndOfDirectiveToken = 8384,
        EndOfDocumentationCommentToken = 8385,
        EndOfFileToken = 8386, //NB: this is assumed to be the last textless token

        // tokens with text
        BadToken = 8387,
        IdentifierToken = 8388,
        NumericLiteralToken = 8389,
        CharacterLiteralToken = 8390,
        StringLiteralToken = 8391,
        XmlEntityLiteralToken = 8392,  // &lt; &gt; &quot; &amp; &apos; or &name; or &#nnnn; or &#xhhhh;
        XmlTextLiteralToken = 8393,    // xml text node text
        XmlTextLiteralNewLineToken = 8394,

        // trivia
        EndOfLineTrivia = 8395,
        WhitespaceTrivia = 8396,
        SingleLineCommentTrivia = 8397,
        MultiLineCommentTrivia = 8398,
        DocumentationCommentExteriorTrivia = 8399,
        SingleLineDocumentationCommentTrivia = 8400,
        MultiLineDocumentationCommentTrivia = 8401,
        DisabledTextTrivia = 8402,
        PreprocessingMessageTrivia = 8403,
        IfDirectiveTrivia = 8404,
        ElifDirectiveTrivia = 8405,
        ElseDirectiveTrivia = 8406,
        EndIfDirectiveTrivia = 8407,
        RegionDirectiveTrivia = 8408,
        EndRegionDirectiveTrivia = 8409,
        DefineDirectiveTrivia = 8410,
        UndefDirectiveTrivia = 8411,
        ErrorDirectiveTrivia = 8412,
        WarningDirectiveTrivia = 8413,
        LineDirectiveTrivia = 8414,
        PragmaWarningDirectiveTrivia = 8415,
        PragmaChecksumDirectiveTrivia = 8416,
        ReferenceDirectiveTrivia = 8417,
        BadDirectiveTrivia = 8418,
        SkippedTokensTrivia = 8419,

        // xml nodes (for xml doc comment structure)
        XmlElement = 8420,
        XmlElementStartTag = 8421,
        XmlElementEndTag = 8422,
        XmlEmptyElement = 8423,
        XmlTextAttribute = 8424,
        XmlCrefAttribute = 8425,
        XmlNameAttribute = 8426,
        XmlName = 8427,
        XmlPrefix = 8428,
        XmlText = 8429,
        XmlCDataSection = 8430,
        XmlComment = 8431,
        XmlProcessingInstruction = 8432,

        // documentation comment nodes (structure inside DocumentationCommentTrivia)
        TypeCref = 8433,
        QualifiedCref = 8434,
        NameMemberCref = 8435,
        IndexerMemberCref = 8436,
        OperatorMemberCref = 8437,
        ConversionOperatorMemberCref = 8438,
        CrefParameterList = 8439,
        CrefBracketedParameterList = 8440,
        CrefParameter = 8441,

        // names & type-names
        IdentifierName = 8442,
        QualifiedName = 8443,
        GenericName = 8444,
        TypeArgumentList = 8445,
        AliasQualifiedName = 8446,
        PredefinedType = 8447,
        ArrayType = 8448,
        ArrayRankSpecifier = 8449,
        PointerType = 8450,
        NullableType = 8451,
        OmittedTypeArgument = 8452,
        BaseClassWithArguments = 8453,

        // expressions
        ParenthesizedExpression = 8454,
        ConditionalExpression = 8455,
        InvocationExpression = 8456,
        ElementAccessExpression = 8457,
        ArgumentList = 8458,
        BracketedArgumentList = 8459,
        Argument = 8460,
        NameColon = 8461,
        CastExpression = 8462,
        AnonymousMethodExpression = 8463,
        SimpleLambdaExpression = 8464,
        ParenthesizedLambdaExpression = 8465,
        ObjectInitializerExpression = 8466,
        CollectionInitializerExpression = 8467,
        ArrayInitializerExpression = 8468,
        AnonymousObjectMemberDeclarator = 8469,
        ComplexElementInitializerExpression = 8470,
        ObjectCreationExpression = 8471,
        AnonymousObjectCreationExpression = 8472,
        ArrayCreationExpression = 8473,
        ImplicitArrayCreationExpression = 8474,
        StackAllocArrayCreationExpression = 8475,
        OmittedArraySizeExpression = 8476,
        DeclarationExpression = 8477,

        // binary expressions
        AddExpression = 8478,
        SubtractExpression = 8479,
        MultiplyExpression = 8480,
        DivideExpression = 8481,
        ModuloExpression = 8482,
        LeftShiftExpression = 8483,
        RightShiftExpression = 8484,
        LogicalOrExpression = 8485,
        LogicalAndExpression = 8486,
        BitwiseOrExpression = 8487,
        BitwiseAndExpression = 8488,
        ExclusiveOrExpression = 8489,
        EqualsExpression = 8490,
        NotEqualsExpression = 8491,
        LessThanExpression = 8492,
        LessThanOrEqualExpression = 8493,
        GreaterThanExpression = 8494,
        GreaterThanOrEqualExpression = 8495,
        IsExpression = 8496,
        AsExpression = 8497,
        CoalesceExpression = 8498,
        SimpleMemberAccessExpression = 8499,  // dot access:   a.b
        PointerMemberAccessExpression = 8500,  // arrow access:   a->b
        ConditionalAccessExpression = 8501,    // question mark access:   a?.b , a?[1]

        // binding expressions
        MemberBindingExpression = 8502,
        ElementBindingExpression = 8503,

        // binary assignment expressions
        SimpleAssignmentExpression = 8504,
        AddAssignmentExpression = 8505,
        SubtractAssignmentExpression = 8506,
        MultiplyAssignmentExpression = 8507,
        DivideAssignmentExpression = 8508,
        ModuloAssignmentExpression = 8509,
        AndAssignmentExpression = 8510,
        ExclusiveOrAssignmentExpression = 8511,
        OrAssignmentExpression = 8512,
        LeftShiftAssignmentExpression = 8513,
        RightShiftAssignmentExpression = 8514,

        // unary expressions
        UnaryPlusExpression = 8515,
        UnaryMinusExpression = 8516,
        BitwiseNotExpression = 8517,
        LogicalNotExpression = 8518,
        PreIncrementExpression = 8519,
        PreDecrementExpression = 8520,
        PointerIndirectionExpression = 8521,
        AddressOfExpression = 8522,
        PostIncrementExpression = 8523,
        PostDecrementExpression = 8524,
        AwaitExpression = 8525,

        // primary expression
        ThisExpression = 8526,
        BaseExpression = 8527,
        ArgListExpression = 8528,
        NumericLiteralExpression = 8529,
        StringLiteralExpression = 8530,
        CharacterLiteralExpression = 8531,
        TrueLiteralExpression = 8532,
        FalseLiteralExpression = 8533,
        NullLiteralExpression = 8534,

        // primary function expressions
        TypeOfExpression = 8535,
        SizeOfExpression = 8536,
        CheckedExpression = 8537,
        UncheckedExpression = 8538,
        DefaultExpression = 8539,
        MakeRefExpression = 8540,
        RefValueExpression = 8541,
        RefTypeExpression = 8542,
        NameOfExpression = 8543,

        // query expressions
        QueryExpression = 8544,
        QueryBody = 8545,
        FromClause = 8546,
        LetClause = 8547,
        JoinClause = 8548,
        JoinIntoClause = 8549,
        WhereClause = 8550,
        OrderByClause = 8551,
        AscendingOrdering = 8552,
        DescendingOrdering = 8553,
        SelectClause = 8554,
        GroupClause = 8555,
        QueryContinuation = 8556,

        // statements
        Block = 8557,
        LocalDeclarationStatement = 8558,
        VariableDeclaration = 8559,
        VariableDeclarator = 8560,
        EqualsValueClause = 8561,
        ExpressionStatement = 8562,
        EmptyStatement = 8563,
        LabeledStatement = 8564,

        // jump statements
        GotoStatement = 8565,
        GotoCaseStatement = 8566,
        GotoDefaultStatement = 8567,
        BreakStatement = 8568,
        ContinueStatement = 8569,
        ReturnStatement = 8570,
        YieldReturnStatement = 8571,
        YieldBreakStatement = 8572,
        ThrowStatement = 8573,

        WhileStatement = 8574,
        DoStatement = 8575,
        ForStatement = 8576,
        ForEachStatement = 8577,
        UsingStatement = 8578,
        FixedStatement = 8579,

        // checked statements
        CheckedStatement = 8580,
        UncheckedStatement = 8581,

        UnsafeStatement = 8582,
        LockStatement = 8583,
        IfStatement = 8584,
        ElseClause = 8585,
        SwitchStatement = 8586,
        SwitchSection = 8587,
        CaseSwitchLabel = 8588,
        DefaultSwitchLabel = 8589,
        TryStatement = 8590,
        CatchClause = 8591,
        CatchDeclaration = 8592,
        CatchFilterClause = 8593,
        FinallyClause = 8594,

        // declarations
        CompilationUnit = 8595,
        GlobalStatement = 8596,
        NamespaceDeclaration = 8597,
        UsingDirective = 8598,
        ExternAliasDirective = 8599,

        // attributes
        AttributeList = 8600,
        AttributeTargetSpecifier = 8601,
        Attribute = 8602,
        AttributeArgumentList = 8603,
        AttributeArgument = 8604,
        NameEquals = 8605,

        // type declarations
        ClassDeclaration = 8606,
        StructDeclaration = 8607,
        InterfaceDeclaration = 8608,
        EnumDeclaration = 8609,
        DelegateDeclaration = 8610,

        BaseList = 8611,
        TypeParameterConstraintClause = 8612,
        ConstructorConstraint = 8613,
        ClassConstraint = 8614,
        StructConstraint = 8615,
        TypeConstraint = 8616,
        ExplicitInterfaceSpecifier = 8617,
        EnumMemberDeclaration = 8618,
        FieldDeclaration = 8619,
        EventFieldDeclaration = 8620,
        MethodDeclaration = 8621,
        OperatorDeclaration = 8622,
        ConversionOperatorDeclaration = 8623,
        ConstructorDeclaration = 8624,
        PrimaryConstructorBody = 8625,
        BaseConstructorInitializer = 8626,
        ThisConstructorInitializer = 8627,
        DestructorDeclaration = 8628,
        PropertyDeclaration = 8629,
        EventDeclaration = 8630,
        IndexerDeclaration = 8631,
        AccessorList = 8632,
        GetAccessorDeclaration = 8633,
        SetAccessorDeclaration = 8634,
        AddAccessorDeclaration = 8644,
        RemoveAccessorDeclaration = 8645,
        UnknownAccessorDeclaration = 8646,
        ParameterList = 8647,
        BracketedParameterList = 8648,
        Parameter = 8649,
        TypeParameterList = 8650,
        TypeParameter = 8651,
        IncompleteMember = 8652,
        ArrowExpressionClause = 8653,

        // expression
        ImplicitElementAccess = 8654
    }
}
